#ifndef MATRIZ_H_
#define MATRIZ_H_

#include <vector>
#include "matrizabstracta.h"

using namespace std;

class Matriz : public MatrizAbstracta {
	public :
		Matriz(Tam cantidadDeFilas = 0, Tam cantidadDeColumnas = 0);
		double get(Indice fila, Indice columna) const;
		void set(Indice fila, Indice columna, double valor);
		Tam cantidadDeFilas() const;
		Tam cantidadDeColumnas() const;
		void setTam(Tam cantidadDeFilas, Tam cantidadDeColumnas);
		//Devuelve la posicion del maximo elemento (absoluto) de la submatriz
		void getPosicionMaxElementoSubmatriz(Indice submatriz, Indice& fila, Indice& columna);
		//Intercambia las columnas
		void swapColumna(Indice columna1, Indice columna2);
		//Intercambia las filas
		void swapFila(Indice fila1, Indice fila2);
		void copiarMatriz(const Matriz* m);
		void trasponer();
		void multiplicacion(const Matriz* matA,const Matriz* matB);
		Indice getFilaMaxElemento(Indice, Indice);
		void dameFila(vector<double>& linea,Indice numero);
		void reemplazarFila(vector<double>& linea,Indice numero);
		virtual ~Matriz();
	private :
		Tam				_cantidadDeFilas;
		Tam				_cantidadDeColumnas;
		vector<double>	_vector;
};

#endif /*MATRIZ_H_*/
